SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE Procedure [dbo].[SP_TTINTE_CNTB_I01]      
/*--------------------------------------------------------------------------*/      
/*---- Empresa     : OFISIS S.A.         ----*/      
/*---- Cliente     : OFISIS S.A.         ----*/      
/*---- Sistema     : Recursos Humanos        ----*/      
/*---- Modulo     : Planilla         ----*/      
/*---- Programa     : Pase a contabilidad (Previo)    ----*/      
/*---- Script     : TTINTE_CNTB.SQL         ----*/      
/*---- Nombre SP    : SP_TTINTE_CNTB_I01      ----*/      
/*---- Desarrollado por    : JLC        ----*/      
/*---- Fecha Creacion    : 15/08/2001       ----*/      
/*---- Base de Datos    : SQL SERVER        ----*/      
/*---- Version     : 7.0         ----*/      
/*---- Invoca a SP     :           ----*/      
/*--------------------------------------------------------------------------*/      
/*---Modificado 1 por     :  ABA                         ----*/      
/*---Fecha Modificaci”n   :  27/05/2003               ----*/       
/*---Detalle Modificaci”n :  actualizacion version 5.0    ----*/      
/*--------------------------------------------------------------------------*/      
/*---- Comentarios    :            ----*/      
/*--------------------------------------------------------------------------*/      
/* drop proc SP_TTINTE_CNTB_I01         ----*/      
/* grant all on SP_TTINTE_CNTB_I01 to PUBLIC     ----*/      
/* Execute SP_TTINTE_CNTB_I01 '01', '001', '001', 'EMP', 'EMP', 'PLE',      
   NULL, 2003, 09, 1, '09/30/2003', 'OFIPLAN', 'M', 7, 'A', 'S'   ----*/      
/*--------------------------------------------------------------------------*/      
 @ISCO_EMPR_INIC TD_VC_002,      
 @ISCO_UNID_INIC TD_VC_003,      
 @ISCO_UNID_FINA TD_VC_003,      
 @ISCO_PLAN_INIC TD_VC_003,      
 @ISCO_PLAN_FINA TD_VC_003,      
 @ISCO_ASIE  TD_VC_003,      
 @ISCO_GRUP  TD_VC_003,      
 @INNU_ANNO  TD_IN_004_ANOS,      
 @INNU_PERI  TD_IN_001,      
 @INNU_CORR_PERI TD_IN_001,      
 @IDFE_MOVI  TD_DT_001,      
 @ISCO_GRUP_SEGU TD_VC_008,      
 @ISTI_GENE  TD_VC_001,      
 @INNU_PROC  TD_IN_001,      
 @ISST_PLAN  TD_VC_001,        /* 'A' - POR ASIENTO   'G' - POR GRUPO */      
 @ISST_ACTU  TD_VC_001_SINO    /* ACTUALIZACION DE PROCESO YA GENERADO */      

As      
Declare       
  @CSCO_EMPR  TD_VC_002,      
  @CSCO_UNID  TD_VC_003,      
  @CSCO_PLAN  TD_VC_003,      
  @CSCO_ASIE  TD_VC_003,      
  @VSNU_ASTO  TD_VC_010,      
  @VNNU_SECU  TD_IN_001,      
  @VNNU_PROC  TD_IN_001,      
  @VDFE_INIC  TD_DT_001,      
  @VDFE_FINA  TD_DT_001,      
  @VNFA_CAMB_DIAR TD_IN_001,      
  @VSIT_OPER  TD_VC_003,      
  -- Variables para segundo cursor --      
  @CNNU_CNTB_EMPR TD_IN_001,      
  @CSCO_UNID_CNTB TD_VC_003,      
  @CSCO_OPRC_CNTB TD_VC_003,      
  @CDFE_MOVI  TD_DT_001,      
  @CSCO_CNTA_CTBL TD_VC_020,      
  @CSTI_AUXI  TD_VC_001,      
  @CSCO_AUXI  TD_VC_010,      
  @CSCO_MONE  TD_VC_003,      
  @CNFA_CAMB  TD_NU_009_004,      
  @CSTI_CALC  TD_VC_001,      
  @CNIM_MOVI  TD_NU_016_004,      
  @CSDE_GLOS  TD_VC_050,      
  @VSST_PERI  TD_VC_001,      
  @VSTI_OPER  TD_VC_001,      
  @VSCO_MONE_CNTA TD_VC_003,      
  @VSID_MONE  TD_VC_003,      
  @VNIM_MOVI_CONV TD_NU_016_004,      
  @VSNU_ASTO_ACTU  TD_VC_010,      
  @VNNU_CONT  TD_IN_001      
       
/* Borro la data generada para volver a insertarla ya que es una actualizacion */      
 If @ISST_ACTU = 'S'      
    Delete TTINTE_CNTB       
    where CO_EMPR = @ISCO_EMPR_INIC AND NU_PROC = @INNU_PROC

  -- Si el proceso es por Asiento obtengo empresa, unidad y planilla --      
  If @ISST_PLAN = 'A'      
   declare CU_TTINTE_CNTB_I01_1 cursor for      
   Select distinct t1.CO_EMPR, t1.CO_UNID, t1.CO_PLAN, t1.NU_CNTB_EMPR, t1.CO_UNID_CNTB,      
   t1.CO_OPRC_CNTB, t1.CO_ASIE      
   From  TTASIE_EMPR t1, TRINFO_GRPL t2      
   Where t1.CO_EMPR = @ISCO_EMPR_INIC      
   And  t1.CO_UNID >= @ISCO_UNID_INIC      
   And   t1.CO_UNID <= @ISCO_UNID_FINA      
   And   t1.CO_PLAN >= @ISCO_PLAN_INIC      
   And   t1.CO_PLAN <= @ISCO_PLAN_FINA      
   And  t1.CO_ASIE = @ISCO_ASIE      
   And   t2.CO_EMPR = t1.CO_EMPR      
   And   t2.TI_INF1 = t1.CO_UNID      
   And   t2.TI_INF2 = t1.CO_PLAN      
   And   t2.CO_GRUP = @ISCO_GRUP_SEGU      
  Else      
  -- Si el proceso es por Grupo obtengo los mismos datos pero el from cambia --      
   declare CU_TTINTE_CNTB_I01_1 cursor for      
   Select distinct t1.CO_EMPR, t1.CO_UNID, t1.CO_PLAN, t1.NU_CNTB_EMPR, t1.CO_UNID_CNTB,      
   t1.CO_OPRC_CNTB, t1.CO_ASIE      
   from  TTASIE_EMPR t1, TTAGRU_ASIE t2, TRINFO_GRPL t3      
   where t1.CO_EMPR = @ISCO_EMPR_INIC      
   and  t1.CO_UNID >= @ISCO_UNID_INIC and t1.CO_UNID <= @ISCO_UNID_FINA      
   and  t1.CO_PLAN >= @ISCO_PLAN_INIC and t1.CO_PLAN <= @ISCO_PLAN_FINA      
   and  t2.CO_AGRU = @ISCO_GRUP and t2.CO_ASIE = t1.CO_ASIE      
   and  t3.CO_EMPR = t1.CO_EMPR      
   and  t3.TI_INF1 = t1.CO_UNID      
   and  t3.TI_INF2 = t1.CO_PLAN      
   and  t3.CO_GRUP = @ISCO_GRUP_SEGU      
       
/*-----------------------------------------------------------------------------------------*/      
 Select  @VSNU_ASTO = '0000000001', @VNNU_CONT = 0, @VNNU_SECU = 0      
 open CU_TTINTE_CNTB_I01_1      
 Fetch CU_TTINTE_CNTB_I01_1 into @CSCO_EMPR, @CSCO_UNID, @CSCO_PLAN, @CNNU_CNTB_EMPR,       
  @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @CSCO_ASIE      
 While @@Fetch_status = 0      
 Begin      
 --  Asigno el numero de asiento por tipo de asiento      
         Select @VSNU_ASTO = substring('0000000000', 1, datalength('0000000000') -       datalength(convert(varchar(10),       
   1))) + convert(varchar(10), isnull(NU_ULTI_ASTO, 0) + 1)       
  from TCFECH_PROC      
  where CO_EMPR = @CSCO_EMPR and NU_CNTB_EMPR = @CNNU_CNTB_EMPR      
         and CO_UNID_CNTB = @CSCO_UNID_CNTB      
         and CO_OPRC_CNTB = @CSCO_OPRC_CNTB      
  and NU_ANNO = @INNU_ANNO      
         and NU_MESE = @INNU_PERI      
       
 /* Verifico si existen asientos en la TTINTE_CNTB */      
  Select @VSNU_ASTO_ACTU = isnull(max(NU_ASTO), '0')      
  from TTINTE_CNTB      
  where CO_EMPR = @CSCO_EMPR and NU_CNTB_EMPR = @CNNU_CNTB_EMPR      
           and CO_UNID_CNTB = @CSCO_UNID_CNTB      
           and CO_OPRC_CNTB = @CSCO_OPRC_CNTB      
           and NU_ANNO = @INNU_ANNO      
           and NU_MESE = @INNU_PERI      
       
 /* Si el proceso es una actualizaci«n deber  mantener el nomero de asiento */      
  If @ISST_ACTU = 'N' and @VNNU_CONT = 0      
     Select @VSNU_ASTO_ACTU = substring('0000000000', 1, datalength('0000000000') -       
   datalength(convert(varchar(10), 1))) +  convert(varchar(10), isnull(@VSNU_ASTO_ACTU, 0) + 1)       
       
 -- Obtengo factor de cambio mensual de TTFORM_PLAN o de tabla historica--      
    Select @VSST_PERI = ST_PERI      
    from TTCNTR_PLAN      
    where CO_EMPR = @CSCO_EMPR      
    and CO_UNID = @CSCO_UNID      
    and CO_PLAN = @CSCO_PLAN      
    and NU_ANNO = @INNU_ANNO      
    and NU_PERI = @INNU_PERI      
    and NU_CORR_PERI = @INNU_CORR_PERI      
       
 -- Si esta abierto tomo el Tipo de Cambio del mes sino tomo el del mes que corro proceso       
 --   If @VSST_PERI = 'P'      
  Select @VNFA_CAMB_DIAR = isnull(max(NU_DATO_COL1),0)      
  from TTAPOY_FORM      
  where NU_ANNO = @INNU_ANNO      
       and NU_MESE = @INNU_PERI      
       and TI_ARGU = 'FAC'      
       and CO_ARGU = 'DOL'      
 /*   Else      
  Select @VNFA_CAMB_DIAR = isnull(max(NU_DATO_COL1),0)      
  from THFORM_PLAN      
  where NU_ANNO = @INNU_ANNO      
  and NU_PERI = @INNU_PERI      
  and NU_CORR_PERI = @INNU_CORR_PERI      
  and TI_ARGU = 'FAC'      
  and CO_ARGU = 'DOL' */      
                
 --  Asigno valor a las fechas de acuerdo a tipo de generacion --      
  If @ISTI_GENE = 'M'       
     Select @VDFE_INIC = FE_INIC_PERI, @VDFE_FINA = FE_FINA_PERI      
     from TTCNTR_PLAN      
     where CO_EMPR = @CSCO_EMPR      
     and CO_UNID = @CSCO_UNID      
     and CO_PLAN = @CSCO_PLAN      
     and NU_ANNO = @INNU_ANNO      
     and NU_PERI = @INNU_PERI      
     and NU_CORR_PERI = @INNU_CORR_PERI      
  Else       
     Select @VDFE_INIC = @IDFE_MOVI, @VDFE_FINA = @IDFE_MOVI      
       
  If @ISST_ACTU = 'N' and @VNNU_CONT = 0      
     Begin      
    /* Guardo el numero de proceso nuevo que se va a generar */      
     If @ISST_PLAN = 'A'      
        Insert into TTPROC_INTE(CO_EMPR, NU_PROC, CO_SIST, NO_RESP, FE_INIC, FE_FINA,       
        ST_PROC, FE_TRAN_ORIG, FE_CONT, FE_DEFI, ST_ORIG, ST_PLAN, CO_USUA_CREA,     CO_USUA_MODI,       
        FE_USUA_MODI)      
        values(@CSCO_EMPR, @INNU_PROC, 'OFIPLAN',       
       'ASIENTO PLLAS. TIPO:'+@ISCO_ASIE+' EMP:'+@CSCO_EMPR+' UNID:'+@CSCO_UNID+' PLLA:'+      
        @CSCO_PLAN+' ANO:'+convert(varchar(4), @INNU_ANNO)+' MES:'+convert(varchar(2), @INNU_PERI),       
        @VDFE_INIC, @VDFE_FINA, 'P', NULL, NULL, NULL, NULL, @ISST_PLAN, user,user, getdate())      
     Else      
        Insert into TTPROC_INTE(CO_EMPR, NU_PROC, CO_SIST, NO_RESP, FE_INIC, FE_FINA,       
        ST_PROC, FE_TRAN_ORIG, FE_CONT, FE_DEFI, ST_ORIG, ST_PLAN, CO_USUA_MODI, CO_USUA_CREA,           
        FE_USUA_MODI)      
        values(@CSCO_EMPR, @INNU_PROC, 'OFIPLAN',       
       'ASIENTO PLLAS. TIPO:'+@ISCO_GRUP+' EMP:'+@CSCO_EMPR+' UNID:'+@CSCO_UNID+' PLLA:'+      
        @CSCO_PLAN+' ANO:'+convert(varchar(4), @INNU_ANNO)+' MES:'+convert(varchar(2), @INNU_PERI),       
        @VDFE_INIC, @VDFE_FINA, 'P', NULL, NULL, NULL, NULL, @ISST_PLAN, user, user, getdate())      
       
    /* Guardo el detalle de la planilla en la tabla hija */      
        Insert into TTPROC_INPL(CO_EMPR, NU_PROC, NU_ANNO, NU_MESE, CO_GRUP, CO_ASIE,      
        CO_UNID_INIC, CO_UNID_FINA, CO_PLAN_INIC, CO_PLAN_FINA, CO_USUA_CREA,     CO_USUA_MODI,       
        FE_USUA_MODI)      
        values(@CSCO_EMPR, @INNU_PROC, @INNU_ANNO, @INNU_PERI, @ISCO_GRUP, @ISCO_ASIE,      
        @CSCO_UNID, @ISCO_UNID_FINA, @CSCO_PLAN, @CSCO_PLAN, user, user,getdate())      
     end      
       
 -- Hago cursor para pasar cada registro del asiento       
 declare CU_TTINTE_CNTB_I01_2 cursor for      
 Select t1.FE_MOVI, t1.CO_CNTA_CTBL, t1.TI_AUXI, t1.CO_AUXI, t1.CO_MONE,       
        isnull(t1.FA_CAMB, 1), t1.TI_CNTA_CTBL, t1.IM_MOVI, t1.DE_GLOS       
 from   TDASIE_CTBL t1      
 where  t1.CO_EMPR = @CSCO_EMPR      
 and t1.CO_UNID = @CSCO_UNID      
 and t1.CO_PLAN = @CSCO_PLAN      
 and ((@ISTI_GENE = 'D') or (@ISTI_GENE = 'M'       
 and t1.NU_ANNO = @INNU_ANNO      
 and t1.NU_MESE = @INNU_PERI))      
 and t1.CO_ASIE = @CSCO_ASIE      
 and ((@ISTI_GENE = 'M') or (@ISTI_GENE = 'D' and t1.FE_MOVI = @IDFE_MOVI))      
 Order by NU_CORR      
       
 -- Abro el segundo cursor       
 open CU_TTINTE_CNTB_I01_2;      
 Fetch CU_TTINTE_CNTB_I01_2 into @CDFE_MOVI, @CSCO_CNTA_CTBL, @CSTI_AUXI, @CSCO_AUXI,       
  @CSCO_MONE, @CNFA_CAMB, @CSTI_CALC, @CNIM_MOVI, @CSDE_GLOS      
 While @@Fetch_status = 0      
 Begin      
       
   Select @VNNU_SECU = @VNNU_SECU + 1      
   Select @VNIM_MOVI_CONV = @CNIM_MOVI * @CNFA_CAMB      
       
   If @CSTI_CALC = 'C' -- 'D'      
      Select @VSTI_OPER = 'C'      
   Else      
      Select @VSTI_OPER = 'A'      
       
   If Rtrim(Ltrim(@CSTI_AUXI)) is NULL      
      Select @CSTI_AUXI = null      
      
   IF Round(@CNIM_MOVI,2) < 0.00       
      Begin      
        Select @CNIM_MOVI = ABS(@CNIM_MOVI)      
        If @VSTI_OPER = 'A'      
           Select @VSTI_OPER = 'C'       
        Else      
           Select @VSTI_OPER = 'A'       
      End       
      
   If @CSCO_MONE = 'DOL'      
      Select @CNFA_CAMB = @VNFA_CAMB_DIAR      
       
        -- Verifico la moneda de la cuenta --      
   Select @VSID_MONE = ST_MONE, @VSCO_MONE_CNTA = CO_MONE      
   from TMPLAN_EMPR      
   where CO_EMPR = @CSCO_EMPR and CO_CNTA_EMPR = @CSCO_CNTA_CTBL      
       
   If @VSID_MONE = 'N'      
      Begin      
   -- 'N'  respeto moneda la cuenta--      
      If @VSCO_MONE_CNTA != @CSCO_MONE      
         Begin      
         Select @VNIM_MOVI_CONV = @CNIM_MOVI      
         If @CNFA_CAMB = 1.00      
            Select @CNIM_MOVI = @CNIM_MOVI*@CNFA_CAMB      
         else      
            Select @CNIM_MOVI = @CNIM_MOVI/@CNFA_CAMB      
         Select @CSCO_MONE = @VSCO_MONE_CNTA      
         End      
      Else      
         Begin      
         If @CNFA_CAMB = 1.00      
            Select @VNIM_MOVI_CONV = @CNIM_MOVI*@CNFA_CAMB      
         else      
            Select @VNIM_MOVI_CONV = @CNIM_MOVI/@CNFA_CAMB      
         Select @CNIM_MOVI = @CNIM_MOVI      
         End      
      End      
   Else      
      Begin      
         If @VSCO_MONE_CNTA != @CSCO_MONE      
            Begin      
            Select @VNIM_MOVI_CONV = @CNIM_MOVI      
            Select @CNIM_MOVI = @CNIM_MOVI/@CNFA_CAMB      
            End      
         else      
            Begin      
            Select @VNIM_MOVI_CONV = @CNIM_MOVI*@CNFA_CAMB      
            Select @CNIM_MOVI = @CNIM_MOVI      
         End      
      End      
       


 
/*
CO_EMPR = @CSCO_EMPR and NU_CNTB_EMPR = @CNNU_CNTB_EMPR and CO_UNID_CNTB = @CSCO_UNID_CNTB      
    and CO_OPRC_CNTB = @CSCO_OPRC_CNTB and NU_ANNO = @INNU_ANNO and NU_MESE = @INNU_PERI      
    and NU_ASTO = @VSNU_ASTO_ACTU and NU_SECU = @VNNU_SECU      
  */    
 If @VSTI_OPER = 'A'      
    Select @VSIT_OPER = 'ABO'      
 Else      
    Select @VSIT_OPER = 'CAR'      
       
 Insert into TTINTE_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB, NU_ANNO,       
 NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB, CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR,       
 TI_DOCU, NU_DOCU, FE_DOCU, FE_DOCU_VENC, TI_CAMB, CO_MONE, FA_CAMB, FA_CAMB_DIAR, TI_OPER,       
 IM_MVTO_ORIG, IM_MVTO_CNTB, TI_DOCU_REFE, NU_DOCU_REFE, FE_DOCU_REFE, DE_GLOS, NO_GIRA,       
 FE_ENTR_CHEQ, FE_PROG_CHEQ, CO_ORDE_SERV, SI_MVTO_CNTB, CO_UNID_ORIG,       
 CO_OPRC_ORIG, NU_ASTO_ORIG, ST_OTRS, NU_PROC, NU_PROC_SECU, CO_USUA_CREA,CO_USUA_MODI, FE_USUA_MODI)      
 values(@CSCO_EMPR, @CNNU_CNTB_EMPR, @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @INNU_ANNO, @INNU_PERI,       
 @VSNU_ASTO_ACTU, @VNNU_SECU, @CDFE_MOVI, @CSCO_CNTA_CTBL, @CSTI_AUXI, @CSCO_AUXI, NULL, NULL,       
 NULL, NULL, 'PAC', @CSCO_MONE, @CNFA_CAMB, @VNFA_CAMB_DIAR, @VSIT_OPER, @VNIM_MOVI_CONV,       
 @CNIM_MOVI, NULL, NULL, NULL, @CSDE_GLOS, NULL, NULL, NULL, NULL, 'APR',  @INNU_PROC,       
 NULL, NULL, NULL, @INNU_PROC, NULL, user,user, getdate())      
       
 Fetch CU_TTINTE_CNTB_I01_2 into @CDFE_MOVI, @CSCO_CNTA_CTBL, @CSTI_AUXI, @CSCO_AUXI,       
  @CSCO_MONE, @CNFA_CAMB, @CSTI_CALC, @CNIM_MOVI, @CSDE_GLOS      
 End      
        Close CU_TTINTE_CNTB_I01_2      
 deallocate CU_TTINTE_CNTB_I01_2      
       
 /* Sumo contador para el cursor cuando el proceso es por grupo */      
 Select @VNNU_CONT = @VNNU_CONT + 1      
       
 Fetch CU_TTINTE_CNTB_I01_1 into @CSCO_EMPR, @CSCO_UNID, @CSCO_PLAN, @CNNU_CNTB_EMPR,       
  @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @CSCO_ASIE      
 End      
 Close CU_TTINTE_CNTB_I01_1      
 deallocate CU_TTINTE_CNTB_I01_1      
return      
/*---------------------------------------------FIN--------------------------------------------*/
-----------------------------------------------------------
-- Type: Stored Procedure
-- Name: SP_TTPROC_INLO_Q01
-----------------------------------------------------------

GO
